package model

import (
	"time"

	"gorm.io/gorm"
)

// DictType 字典类型模型
type DictType struct {
	ID        uint           `gorm:"primaryKey;type:int unsigned" json:"id"`
	DictCode  string         `gorm:"type:varchar(50);not null;uniqueIndex;comment:字典编码" json:"dictCode"`
	DictName  string         `gorm:"type:varchar(100);not null;comment:字典名称" json:"dictName"`
	Status    int8           `gorm:"type:tinyint;default:1;comment:状态 0-禁用 1-启用" json:"status"`
	Remark    string         `gorm:"type:varchar(500);comment:备注" json:"remark"`
	CreatedAt time.Time      `json:"createdAt"`
	UpdatedAt time.Time      `json:"updatedAt"`
	DeletedAt gorm.DeletedAt `gorm:"index" json:"-"`

	// 关联
	DictData []*DictData `gorm:"foreignKey:DictTypeID" json:"dictData,omitempty"`
}

// TableName 指定表名
func (DictType) TableName() string {
	return "sys_dict_type"
}

// DictData 字典数据模型
type DictData struct {
	ID         uint           `gorm:"primaryKey" json:"id"`
	DictTypeID uint           `gorm:"type:int unsigned;not null;comment:字典类型ID" json:"dictTypeId"`
	DictCode   string         `gorm:"type:varchar(50);not null;comment:字典类型编码" json:"dictCode"`
	DictLabel  string         `gorm:"type:varchar(100);not null;comment:字典标签" json:"dictLabel"`
	DictValue  string         `gorm:"type:varchar(100);not null;comment:字典键值" json:"dictValue"`
	DictSort   int            `gorm:"type:int;default:0;comment:排序" json:"dictSort"`
	CssClass   string         `gorm:"type:varchar(100);comment:CSS类名" json:"cssClass"`
	ListClass  string         `gorm:"type:varchar(100);comment:列表样式" json:"listClass"`
	IsDefault  int8           `gorm:"type:tinyint;default:0;comment:是否默认 0-否 1-是" json:"isDefault"`
	Status     int8           `gorm:"type:tinyint;default:1;comment:状态 0-禁用 1-启用" json:"status"`
	Remark     string         `gorm:"type:varchar(500);comment:备注" json:"remark"`
	CreatedAt  time.Time      `json:"createdAt"`
	UpdatedAt  time.Time      `json:"updatedAt"`
	DeletedAt  gorm.DeletedAt `gorm:"index" json:"-"`

	// 关联
	DictType *DictType `gorm:"foreignKey:DictTypeID" json:"dictType,omitempty"`
}

// TableName 指定表名
func (DictData) TableName() string {
	return "sys_dict_data"
}
